// 适配器模式的目的是为了解决对象之间的接口不兼容的问题，通过适配器模式可以不更改源代码的情况下，让两个原本不兼容的对象在调用时正常工作。

// 优点：
// 让任何两个没有关联的类可以同时有效运行，并且提高了复用性、透明度、以及灵活性

// 缺点：
// 过多的使用适配器模式，会让系统变得零乱，不易整体把控。建议在无法重构的情况下使用适配器。

// 例子：
// 拿一个现实中的例子来说，杰克只会英语，小明只会中文，它们在交流上出现了障碍，小红同时会中英双语，通过小红将杰克的英语翻译成中文，让小明和杰克进行无障碍的沟通，这里小红就起到了适配器的角色。

class Jack {
  english() {
    return 'I speak English';
  }
}
class Xiaoming {
  chinese() {
    return '我只会中文';
  }
}
// 适配器
class XiaoHong {
  constructor(person) {
    this.person = person;
  }
  chinese() {
    return `${this.person.english()} 翻译： "我会说英语"`;
  }
}
class Communication {
  speak(language) {
    console.log(language.chinese());
  }
}

const xiaoming = new Xiaoming();
const xiaoHong = new XiaoHong(new Jack());
const communication = new Communication();
communication.speak(xiaoming);
communication.speak(xiaoHong);
